package com.docmgmt.mvp.ragflow.dto;

import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import jakarta.validation.constraints.*;
import java.util.List;

/**
 * Chunk 检索请求 DTO
 * 
 * POST /api/v1/retrieval
 */
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class ChunkRetrievalRequest {

    /**
     * 查询文本
     */
    @NotBlank(message = "查询文本不能为空")
    private String question;

    /**
     * 知识库ID列表
     */
    @JsonProperty("dataset_ids")
    @NotEmpty(message = "知识库ID列表不能为空")
    private List<String> datasetIds;

    /**
     * 文档ID列表（可选）
     */
    @JsonProperty("document_ids")
    private List<String> documentIds;

    /**
     * 返回Chunk数量
     */
    @JsonProperty("top_k")
    @Min(value = 1, message = "top_k必须>=1")
    @Max(value = 100, message = "top_k必须<=100")
    private Integer topK;

    /**
     * 相似度阈值（0-1）
     */
    @JsonProperty("similarity_threshold")
    @DecimalMin(value = "0.0", message = "similarity_threshold必须>=0")
    @DecimalMax(value = "1.0", message = "similarity_threshold必须<=1")
    private Float similarityThreshold;

    /**
     * 向量相似度权重（0-1）
     */
    @JsonProperty("vector_similarity_weight")
    @DecimalMin(value = "0.0", message = "vector_similarity_weight必须>=0")
    @DecimalMax(value = "1.0", message = "vector_similarity_weight必须<=1")
    private Float vectorSimilarityWeight;

    /**
     * 重排序模型ID（可选）
     */
    @JsonProperty("rerank_id")
    private String rerankId;
}

